﻿
/** 
* 获取本周、本季度、本月、上月的开端日期、停止日期 
*/
var now = new Date(); //当前日期 
var nowDayOfWeek = now.getDay(); //今天本周的第几天 
var nowDay = now.getDate(); //当前日 
var nowMonth = now.getMonth(); //当前月 
var nowYear = now.getFullYear(); //当前年 
nowYear += (nowYear < 2000) ? 1900 : 0; // 最小年份是1900年

var lastMonthDate = new Date(); //上月日期 
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth() - 1);
var lastYear = lastMonthDate.getYear();
var lastMonth = lastMonthDate.getMonth();

//格局化日期：yyyy-MM-dd 
function formatDate(date) {
    var myyear = date.getFullYear();
    var mymonth = date.getMonth() + 1;
    var myweekday = date.getDate();

    if (mymonth < 10) {
        mymonth = "0" + mymonth;
    }
    if (myweekday < 10) {
        myweekday = "0" + myweekday;
    }
    return (myyear + "-" + mymonth + "-" + myweekday);
}

//获得某月的天数 
function getMonthDays(myMonth) {
    var monthStartDate = new Date(nowYear, myMonth, 1);
    var monthEndDate = new Date(nowYear, myMonth + 1, 1);
    var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
    return days;
}

//获取某日后这个月所有日期(yyyy-MM-dd)
function getMonthAllDay(day) {
    let daysOfMonth = [];
    let fullYear = new Date().getFullYear();
    let month = new Date().getMonth() + 1;
    let lastDayOfMonth = new Date(fullYear, month, 0).getDate();
    for (var i = 1; i <= lastDayOfMonth; i++) {
        if (i >= day) {
            daysOfMonth.push(fullYear + '-' + month + '-' + i);
        }
    };
    return daysOfMonth;
}

//获取当前日期星期X(yyyy-MM-dd 星期X)
function getDayAndWeekDate(day, isWeek) {
    var newDate = new Date(day);
    var Week = ['日', '一', '二', '三', '四', '五', '六'];
    var str = "";
    if (isWeek == "Y") {
        str += formatDate(newDate);
        str += '|星期' + Week[newDate.getDay()] + ",";
    }
    else {
        if (Week[newDate.getDay()] != "六" && Week[newDate.getDay()] != "日") {
            str += formatDate(newDate);
            str += '|星期' + Week[newDate.getDay()] + ",";
        }
    }

    return str;
}

//获取两个时间段内所有日期
function getAllDate(begin, end) {
    var ab = begin.split("-");
    var ae = end.split("-");
    var db = new Date();
    db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]);
    var de = new Date();
    de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]);
    var unixDb = db.getTime();
    var unixDe = de.getTime();
    var days = [];
    for (var k = unixDb; k <= unixDe;) {
        days.push(formatDate(new Date(parseInt(k))));
        //console.log((formatDate(new Date(parseInt(k)))));
        k = k + 24 * 60 * 60 * 1000;
    }
    return days;
}

//获取指定排班类型数据(type{week,month,custom})
function getShiftTypeDate(type, startDate, endDate, isWeek, weekPoint) {
    var str = "";
    var dqsj = new Date();
    if (type == "week") {  //周          
        var len = 7;
        var dqday = dqsj.getDay() == 0 ? 7 : dqsj.getDay();
        if (dqday > weekPoint) {
            //console.info("当前星期>工厂周开始日")
            len = 7 - Number(dqday) + Number(weekPoint);
        }
        else if (dqday < weekPoint) {
            //console.info("当前星期<工厂周开始日")
            len = Number(weekPoint) - Number(dqday);
        }

        for (var i = 0; i < len ; i++) {        
            var currentDate = dqsj.setDate(dqsj.getDate());
            str += getDayAndWeekDate(currentDate, isWeek);
            dqsj.setDate(dqsj.getDate() + 1);
        }
    }
    else if (type == "month") { //月
        var daylist = getMonthAllDay(dqsj.getDate());
        for (var i = 0; i < daylist.length; i++) {
            str += getDayAndWeekDate(daylist[i], isWeek);
        }
    }
    else if (type == "custom") { //自定义
        var daylist = getAllDate(startDate, endDate);
        for (var i = 0; i < daylist.length; i++) {
            str += getDayAndWeekDate(daylist[i], isWeek);
        }
    }

    str = str.replace(/\//g, "-");
    str = str.substring(0, str.length - 1);
    return str;
}

//获得本周的开端日期 
function getWeekStartDate() {
    var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
    return formatDate(weekStartDate);
}

//获得本周的停止日期 
function getWeekEndDate() {
    var weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));
    return formatDate(weekEndDate);
}

//获得本月的开端日期 
function getMonthStartDate() {
    var monthStartDate = new Date(nowYear, nowMonth, 1);
    return formatDate(monthStartDate);
}

//获得本月的停止日期 
function getMonthEndDate() {
    var monthEndDate = new Date(nowYear, nowMonth, getMonthDays(nowMonth));
    return formatDate(monthEndDate);
}

//获得上月开端时候 
function getLastMonthStartDate() {
    var lastMonthStartDate = new Date(nowYear, lastMonth, 1);
    return formatDate(lastMonthStartDate);
}

//获得上月停止时候 
function getLastMonthEndDate() {
    var lastMonthEndDate = new Date(nowYear, lastMonth, getMonthDays(lastMonth));
    return formatDate(lastMonthEndDate);
}

//获得本季度的开端月份 
function getQuarterStartMonth() {
    var quarterStartMonth = 0;
    if (nowMonth < 3) {
        quarterStartMonth = 0;
    }
    if (2 < nowMonth && nowMonth < 6) {
        quarterStartMonth = 3;
    }
    if (5 < nowMonth && nowMonth < 9) {
        quarterStartMonth = 6;
    }
    if (nowMonth > 8) {
        quarterStartMonth = 9;
    }
    return quarterStartMonth;
}

//获得本季度的开端日期 
function getQuarterStartDate() {
    var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1);
    return formatDate(quarterStartDate);
}

//获得本季度的停止日期 
function getQuarterEndDate() {
    var quarterEndMonth = getQuarterStartMonth() + 2;
    var quarterStartDate = new Date(nowYear, quarterEndMonth, getMonthDays(quarterEndMonth));
    return formatDate(quarterStartDate);
}